package br.com.gemepde.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.gemepde.dao.CabecalhoDao;
import br.com.gemepde.database.HibernateUtil;
import br.com.gemepde.domain.Cabecalho;

public class CabecalhoDaoHibernate implements CabecalhoDao{

	public void salvar(Cabecalho cabecalho) {
		Session sessao = null;
		Transaction transacao = null;
		
		try {
			sessao = HibernateUtil.getSessionfactory().openSession();
			transacao = sessao.beginTransaction();
			sessao.save(cabecalho);
			transacao.commit();
		} catch (HibernateException e) {
			System.out.println("Não foi possível inserir cabeçalho. Mensagem: " + e.getMessage());
		} finally {
			try {
				sessao.close();
			} catch (Throwable e2) {
				System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
			}
		}
	}

	public void atualizar(Cabecalho cabecalho) {
		Session sessao = null;
		Transaction transacao = null;
		
		try {
			sessao = HibernateUtil.getSessionfactory().openSession();
			transacao = sessao.beginTransaction();
			sessao.update(cabecalho);
			transacao.commit();
		} catch (HibernateException e) {
			System.out.println("Não foi possível atualizar cabeçalho. Mensagem: " + e.getMessage());
		} finally {
			try {
				sessao.close();
			} catch (Throwable e2) {
				System.out.println("Erro ao fechar operação de atualização. Mensagem: " + e2.getMessage());
			}
		}
	}

	@SuppressWarnings("unchecked")
	public Cabecalho buscarUltimo() {
		List<Cabecalho> resultados = new ArrayList<Cabecalho>();
		Cabecalho cabecalho = null;
		Session sessao = null;
		Transaction transacao = null;
		Query consulta = null;
		
		try {
			sessao = HibernateUtil.getSessionfactory().openSession();
			transacao = sessao.beginTransaction();
			consulta = sessao.createQuery("from Cabecalho");
			resultados = consulta.list();
			if (resultados.size() > 0){
				cabecalho = resultados.get(resultados.size()-1);
			}
			transacao.commit();
					
		} catch (HibernateException e) {
			System.out.println("Não foi possível buscar contato. Mensagem: " + e.getMessage());
		} finally {
			try {
				sessao.close();
			} catch (Throwable e2) {
				System.out.println("Erro ao fechar operação de buscar. Mensagem: " + e2.getMessage());
			}
		}
		return cabecalho;
	}

}
